/**
 * @file FileIO.h
 * @brief 文件输入输出处理类的声明
 * 
 * 该类提供了高性能的文件读写功能，主要用于处理网格数据和属性数据。
 * 核心特性：
 * 1. 使用内存映射实现高效文件读取
 * 2. 支持大文件处理
 * 3. 提供数据压缩功能
 * 4. 支持Windows和POSIX系统
 */
#pragma once
#include <string>
#include <vector>
#include "GridStructs.h"

class FileIO
{
public:
    // 内存映射文件类
    class MemoryMappedFile
    {
    public:
        MemoryMappedFile();
        ~MemoryMappedFile();
        
        bool open(const std::string &filename, size_t &fileSize);
        void *getData() const;
        
    private:
        #ifdef _WIN32
        void *hFile;
        void *hMapping;
        #else
        int fd;
        size_t length;
        #endif
        void *data;
    };

    // 读取网格文件
    static void readGridFile(const std::string &filename, 
                           GridSize &size,
                           std::vector<std::vector<double>> &coord,
                           std::vector<double> &zcorn);

    // 读取属性文件
    static void readPropertiesFile(const std::string &filename,
                                 GridProperties &props);

    // 保存结果
    static void saveResults(const std::string &filename,
                          const std::vector<Result> &results);

private:
    static void processPropertyLine(const std::string &line,
                                  const std::string &keyword,
                                  GridProperties &props);
    
    static std::string getFormatFromSource(const std::string &filename);
    
    static void writePropertyValues(std::ofstream &file,
                                  const std::vector<Result> &results,
                                  bool isYoung,
                                  const std::string &indent);

    static bool checkFileExists(const std::string &filename);
};